import 'dart:io';

import 'package:look_net_ip_util/look_net_ip_utils.dart';
import 'package:test/test.dart';

void main() {
  var ipUtils = IpUtils();
  // var ipv4ErrorList = [
  //   '000.000.000.0001',
  //   '256.255.255.255',
  //   '192.168.01.01.0',
  //   '138.198.1.',
  //   '.98.198.138'
  // ];
  // print(ipUtils.isIpv4Segments(ipv4ErrorList[2].split('.'), inputMode: LeadingZerosMode.any,checkLength: false));
  final address = InternetAddress('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
      type: InternetAddressType.IPv6);
  print(address.rawAddress);

  List<int> ipv6IntList = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'
      .split(':')
      .map((e) => int.parse(e, radix: 16))
      .toList();
  Ipv6PortSeparator separator = Ipv6PortSeparator.squareBracketColon;
  print(separator);
}
//
// import 'dart:io';
// import 'package:faker/faker.dart';
//
// void main() {
//   var ipv4List = [
//     IpUtils.ipv4MinString,
//     IpUtils.ipv4MaxString,
//     '192.168.01.001',
//     '000.000.000.000',
//     '0.00.000.000'
//   ];
//   var ipv4IntList = [
//     IpUtils.ipv4ToInt(ipv4List[0]),
//     IpUtils.ipv4ToInt(ipv4List[1]),
//     IpUtils.ipv4ToInt(ipv4List[2]),
//     IpUtils.ipv4ToInt(ipv4List[3]),
//     IpUtils.ipv4ToInt(ipv4List[4])
//   ];
//   var ipv4ErrorList = [
//     '000.000.000.0001',
//     '256.255.255.255',
//     '192.168.01.01.0',
//     '138.198.1.',
//     '.98.198.138'
//   ];
//
//   group('IpUtil IPv4 Tests', () {
//     test('ipv4ToInt Tests', () async {
//       print(int.tryParse(''));
//       for (var i = 0; i < ipv4List.length; i++) {
//         expect(IpUtils.ipv4ToInt(ipv4List[i]), ipv4IntList[i]);
//       }
//       for (var ip in ipv4ErrorList) {
//         expect(IpUtils.tryIpv4ToInt(ip), null);
//         expect(IpUtils.tryIpv4ToInt(ip, defaultValue: -1), -1);
//       }
//     });
//     test('intToIpv4 Tests', () async {
//       for (var i = 0; i < ipv4List.length; i++) {
//         expect(IpUtils.intToIpv4(
//             ipv4IntList[i]), IpUtils.removeIpv4LeadingZeros(ipv4List[i]));
//       }
//     });
//
//     test('ipv4ToInt and intToIpv4 Tests', () async {
//       // Generate and test 1000 IPv4 addresses
//       for (int i = 0; i < 1000; i++) {
//         String ip = Faker().internet.ipv4Address();
//         int ipInt = IpUtils.ipv4ToInt(ip);
//         String ipString = IpUtils.intToIpv4(ipInt);
//         expect(ip == ipString, true,
//             reason:
//             'Failed for address: ip: $ip  ipString: $ipString  ipInt: $ipInt');
//       }
//     });
//     test('isIpv4 Tests', () async {
//       for (var ip in ipv4List) {
//         expect(IpUtils.isIpv4(ip), true);
//       }
//       for (var ip in ipv4ErrorList) {
//         expect(IpUtils.isIpv4(ip), false);
//       }
//
//       // Generate and test 1000 IPv4 addresses
//       for (int i = 0; i < 1000; i++) {
//         String ip = Faker().internet.ipv4Address();
//         expect(IpUtils.isIpv4(ip), true, reason: 'Failed for address: ip: $ip ');
//         ip = IpUtils.addIpv4LeadingZeros(ip);
//         expect(IpUtils.isIpv4(ip), true, reason: 'Failed for address: ip: $ip ');
//         ip = IpUtils.removeIpv4LeadingZeros(ip);
//         expect(IpUtils.isIpv4(ip), true, reason: 'Failed for address: ip: $ip ');
//       }
//     });
//   });
//
//   group('IpUtil IPv6 Tests', () {});
//   group('IPUtil Tests', () {
//     test('isIPv6Compressed Test', () {
//       RegExp ipv6CompressedRegExp = RegExp(
//           r'^((?:[0-9a-fA-F]{1,4}(?::[0-9a-fA-F]{1,4})*)?::(?:[0-9a-fA-F]{1,4}(?::[0-9a-fA-F]{1,4})*)?)$');
//       expect(ipv6CompressedRegExp.hasMatch('::'), true);
//       expect(ipv6CompressedRegExp.hasMatch('1::'), true);
//       expect(ipv6CompressedRegExp.hasMatch('::1'), true);
//       expect(ipv6CompressedRegExp.hasMatch('1::1'), true);
//       expect(ipv6CompressedRegExp.hasMatch('1:1:1:1:1::1'), true);
//       expect(ipv6CompressedRegExp.hasMatch('1:1:1:1:1:1:1:1'), false);
//       expect(ipv6CompressedRegExp.hasMatch(':::'), false);
//       expect(ipv6CompressedRegExp.hasMatch('1::1:0'), true);
//
//       // Generate and test 1000 IPv6 addresses
//       for (int i = 0; i < 1000; i++) {
//         String ipv6Address = Faker().internet.ipv6Address();
//         expect(ipv6CompressedRegExp.hasMatch(ipv6Address), true,
//             reason: 'Failed for address: $ipv6Address');
//       }
//     });
//     test('toIPv6Compressed Test', () {
//       expect(IpUtils.toIpv6Compressed('192.168.1.1'), '::ffff:192.168.1.1');
//       expect(
//           IpUtils.toIpv6Compressed('::ffff:192.168.1.1'), '::ffff:192.168.1.1');
//       expect(IpUtils.toIpv6Compressed('0:0:0:ffff:192.168.1.1'),
//           '::ffff:192.168.1.1');
//       expect(IpUtils.toIpv6Compressed('2001:db8::1'), '2001:db8::1');
//       expect(IpUtils.toIpv6Compressed('2001:db8::0:1'), '2001:db8::1');
//       expect(IpUtils.toIpv6Compressed('2001:db8::0000:1'), '2001:db8::1');
//       expect(IpUtils.toIpv6Compressed('2001:db8:0:0:0:0:2:1'), '2001:db8::2:1');
//
//       expect(IpUtils.toIpv6Compressed('0:1:0:3:0:4:0:5'), '0:1:0:3:0:4:0:5');
//       expect(IpUtils.toIpv6Compressed('0:0:0:3:0:4:0:5'), '::3:0:4:0:5');
//       expect(IpUtils.toIpv6Compressed('1:0:0:3:0:4:0:5'), '1::3:0:4:0:5');
//       expect(IpUtils.toIpv6Compressed('1:0:2:3:0:4:0:0'), '1:0:2:3:0:4::');
//       expect(IpUtils.toIpv6Compressed('1:0:0:3:0:4:0:0'), '1::3:0:4:0:0');
//       expect(IpUtils.toIpv6Compressed('1:0:0:3:0:0:0:0'), '1:0:0:3::');
//       expect(IpUtils.toIpv6Compressed('1:0:0:0:0:0:0:1'), '1::1');
//       expect(IpUtils.toIpv6Compressed('0:0:0:0:0:0:0:0'), '::');
//       expect(IpUtils.toIpv6Compressed('1:0:0:0:0:0:0:0'), '1::');
//       expect(IpUtils.toIpv6Compressed('0:0:0:0:0:0:0:1'), '::1');
//     });
//
//     test('toIPv6Full Test', () {
//       expect(IpUtils.toIpv6Full('192.168.1.1'), '0:0:0:ffff:192.168.1.1');
//       expect(IpUtils.toIpv6Full('::ffff:192.168.1.1'), '0:0:0:ffff:192.168.1.1');
//       expect(IpUtils.toIpv6Full('0:0:0:ffff:192.168.1.1'),
//           '0:0:0:ffff:192.168.1.1');
//       expect(IpUtils.toIpv6Full('2001:0db8::8a2e:0370:7334'),
//           '2001:0db8:0:0:0:8a2e:0370:7334');
//       expect(IpUtils.toIpv6Full('2001:0db8:85a3:0:0:8a2e:0370:7334'),
//           '2001:0db8:85a3:0:0:8a2e:0370:7334');
//       expect(IpUtils.toIpv6Full('::'), '0:0:0:0:0:0:0:0');
//       expect(IpUtils.toIpv6Full('1::'), '1:0:0:0:0:0:0:0');
//       expect(IpUtils.toIpv6Full('::1'), '0:0:0:0:0:0:0:1');
//       expect(IpUtils.toIpv6Full('1::1'), '1:0:0:0:0:0:0:1');
//     });
//     test('getIPv4List Test', () {
//       List<String> ipList =
//       IpUtils.getIpv4ListFromRanges('192.168.1.1-192.168.2.10');
//       print(0xffff);
//       for (var ip in ipList) {
//         print(ip);
//       }
//
//       // expect(ipList.length==10, isTrue);
//       // expect(IPUtil.isIPv4('255.255.255.255'), isTrue);
//       // expect(IPUtil.isIPv4('0.0.0.0'), isTrue);
//     });
//     test(
//         'ipv6ToBigInt test',
//             () =>
//             () {
//           String ipv6Address = '2001:0db8:85a3:0000:0000:8a2e:0370:7334';
//           BigInt bigIntValue = IpUtils.ipv6ToBigInt(ipv6Address);
//           print('IPv6地址: $ipv6Address');
//           print('对应的大整数值: $bigIntValue');
//         });
//     test('ipv4ToInt intToIPv4 Test', () {
//       int? ipInt = IpUtils.ipv4ToInt('255.255.255.255');
//       print(ipInt);
//       String? ipStr = IpUtils.intToIpv4(ipInt);
//       expect(ipStr == '255.255.255.255', isTrue);
//       // expect(IPUtil.isIPv4('255.255.255.255'), isTrue);
//       // expect(IPUtil.isIPv4('0.0.0.0'), isTrue);
//     });
//     test('isIPv4 Test', () {
//       expect(IpUtils.isIpv4('192.168.1.1'), isTrue);
//       expect(IpUtils.isIpv4('255.255.255.255'), isTrue);
//       expect(IpUtils.isIpv4('192.168.1.1.1'), isFalse);
//       expect(IpUtils.isIpv4('192.168.1'), isFalse);
//       expect(IpUtils.isIpv4('192.168.1.1.1.1'), isFalse);
//       expect(IpUtils.isIpv4('192.168.1.1.1.1.1'), isFalse);
//       expect(IpUtils.isIpv4('192.168.1.1.1.1.1.1'), isFalse);
//       expect(IpUtils.isIpv4('192.168.1.1.1.1.1.1.1'), isFalse);
//       expect(IpUtils.isIpv4('192.168.1.1.1.1.1.1.1.1'), isFalse);
//       expect(IpUtils.isIpv4('192.168.1.1.1.1.1.1.1.1.1'), isFalse);
//       expect(IpUtils.isIpv4('192.168.1.1.1.1.1.1.1.1.1.1'), isFalse);
//       expect(IpUtils.isIpv4('192.168.1.1.1.1.1'), isFalse);
//       expect(IpUtils.isIpv4('192.168.1.0'), isTrue);
//
//       expect(IpUtils.isIpv4('192.168.1.00'), isTrue);
//       expect(IpUtils.isIpv4('192.168.1.000'), isTrue);
//       expect(IpUtils.isIpv4('192.168.1.009'), isTrue);
//       expect(IpUtils.isIpv4('192.168.1.090'), isTrue);
//       expect(IpUtils.isIpv4('192.168.000.90'), isTrue);
//       expect(IpUtils.isIpv4('192.168.00.90'), isTrue);
//       expect(IpUtils.isIpv4('192.000.10.90'), isTrue);
//       expect(IpUtils.isIpv4('192.00.10.90'), isTrue);
//
//       expect(IpUtils.isIpv4('192.0.10.010'), isTrue);
//     });
//
//     test('IPv6 Address Validation Test', () {
//       // 有效的IPv6地址 - 全格式
//       expect(IpUtils.isIpv6('2001:0db8:85a3:0000:0000:8a2e:0370:7334'), isTrue);
//       expect(IpUtils.isIpv6('2001:0DB8:85A3:0000:0000:8A2E:0370:7334'),
//           isTrue); // 大小写混合的有效IPv6地址
//       expect(IpUtils.isIpv6('2001:db8:85a3:0:0:8A2E:0370:7334'), isTrue);
//       expect(IpUtils.isIpv6('2001:0db8:85a3::8A2E:370:7334'), isTrue);
//       expect(IpUtils.isIpv6('2001:0db8:85a3:0:0:8a2e:0:7334'),
//           isTrue); // 具有全0段的有效IPv6地址
//       expect(IpUtils.isIpv6('2001:0db8:85a3:0:0:0:0:1'), isTrue); // 回环地址
//       expect(IpUtils.isIpv6('2001:0DB8:0:0:1:0:0:1'), isTrue); // 另一个有效的IPv6地址
//       expect(IpUtils.isIpv6('2001:0DB8:0:0:1::1'), isTrue); // 使用压缩格式的有效地址
//       expect(IpUtils.isIpv6('2001:0DB8:85A3::8A2E:370:7334'),
//           isTrue); // 另一个使用压缩格式的有效地址
//       expect(IpUtils.isIpv6('::ffff:192.168.1.1'), isTrue);
//       expect(IpUtils.isIpv6('0:0:0:ffff:192.168.1.1'), isTrue);
//       final address = InternetAddress('0:0:ffff::192.168.1.1',
//           type: InternetAddressType.IPv6);
//
//       // 无效的IPv6地址
//       expect(IpUtils.isIpv6('192.168.1.1'), isFalse); // 这是IPv4地址，应返回false
//       expect(IpUtils.isIpv6('2001:0DB8:0:0:1:1.2.3.4'),
//           isFalse); // 包含了无效的IPv4地址部分，应返回false
//       expect(
//           IpUtils.isIpv6('invalidIPv6Address'), isFalse); // 无效的IPv6地址格式，应返回false
//     });
//
//     test('isIP tests', () {
//       expect(IpUtils.isIp('192.168.1.1'), isTrue);
//       expect(IpUtils.isIp('255.255.255.255'), isTrue);
//       expect(IpUtils.isIp('0.0.0.0'), isTrue);
//       expect(IpUtils.isIp('127.0.0.1'), isTrue);
//
//       expect(IpUtils.isIp('2001:0db8:85a3:0000:0000:8a2e:0370:7334'), isTrue);
//       expect(IpUtils.isIp('::1'), isTrue);
//       expect(IpUtils.isIp('FE80::0202:B3FF:FE1E:8329'), isTrue);
//       expect(IpUtils.isIp('2001:db8::'), isTrue);
//
//       expect(IpUtils.isIp('256.256.256.256'), isFalse);
//       expect(IpUtils.isIp('192.168.1'), isFalse);
//       expect(IpUtils.isIp(':::1'), isFalse);
//       expect(IpUtils.isIp('2001:db8:::1'), isFalse);
//       expect(IpUtils.isIp('2001:db8::g1'), isFalse);
//       expect(IpUtils.isIp('fe80'), isFalse);
//       expect(IpUtils.isIp('notAnIp'), isFalse);
//
//       expect(IpUtils.isIp(''), isFalse);
//       expect(IpUtils.isIp(' 192.168.1.1 '), isFalse);
//     });
//   });
//
//   group('isIPv4WithMask tests', () {
//     test('Valid IPv4 addresses with mask', () {
//       expect(IpUtils.isIpv4WithCidr('192.168.1.1/24'), isTrue);
//       expect(IpUtils.isIpv4WithCidr('10.0.0.1/8'), isTrue);
//       // Testing with leading zeros allowed
//       expect(IpUtils.isIpv4WithCidr('192.168.001.010/24'), isTrue);
//     });
//
//     test('Invalid IPv4 addresses or masks', () {
//       expect(IpUtils.isIpv4WithCidr('192.168.1.1'), isFalse); // Missing mask
//       expect(
//           IpUtils.isIpv4WithCidr('192.168.1.1/'), isFalse); // Missing mask value
//       expect(IpUtils.isIpv4WithCidr('192.168.1.1/33'),
//           isFalse); // Mask out of range
//       expect(IpUtils.isIpv4WithCidr('256.0.0.1/24'), isFalse); // Invalid IP
//       // Leading zeros not allowed by default
//       expect(IpUtils.isIpv4WithCidr('192.168.001.010/24'), true);
//     });
//
//     test('Boundary conditions', () {
//       expect(IpUtils.isIpv4WithCidr('0.0.0.0/0'), isTrue); // Entire IPv4 range
//       expect(
//           IpUtils.isIpv4WithCidr('255.255.255.255/32'), isTrue); // Single host
//     });
//
//     test('Special cases and incorrect input formats', () {
//       // Incorrect format
//       expect(IpUtils.isIpv4WithCidr('192.168.1.1//24'), isFalse);
//       expect(IpUtils.isIpv4WithCidr('/192.168.1.1/24'), isFalse);
//       expect(IpUtils.isIpv4WithCidr('192.168.1.1/24/'), isFalse);
//       expect(IpUtils.isIpv4WithCidr('192.168.1.1/24/'), isFalse);
//       // Leading and trailing spaces
//       expect(IpUtils.isIpv4WithCidr(' 192.168.1.1/24 '), isFalse);
//     });
//   });
//   group('IPv6 Full Address Validation', () {
//     // 有效的IPv6全地址
//     test('Valid IPv6 full addresses', () {
//       expect(
//           IpUtils.isIpv6Full('2001:0db8:85a3:0000:0000:8a2e:0370:7334'), isTrue);
//       expect(
//           IpUtils.isIpv6Full('2001:0db8:0000:0000:0000:0000:1428:57ab'), isTrue);
//     });
//
//     // 无效的IPv6地址
//     test('Invalid IPv6 addresses', () {
//       expect(IpUtils.isIpv6Full('2001:db8::1428:57ab'), isFalse);
//       expect(IpUtils.isIpv6Full('2001:0db8:85a3:0000:0000:8a2e:0370:XYZZ'),
//           isFalse);
//       expect(IpUtils.isIpv6Full('2001:0db8:85a3:0000:8a2e:0370:7334'), isFalse);
//       expect(IpUtils.isIpv6Full('2001:0db8:85a3:0000:0000:8a2e:0370:7334:1234'),
//           isFalse);
//       expect(IpUtils.isIpv6Full(''), isFalse);
//       expect(IpUtils.isIpv6Full('1234'), isFalse);
//     });
//
//     test('isIPv6Full allows prefix zeros - valid full address', () {
//       expect(
//           IpUtils.isIpv6Full('2001:0db8:85a3:0000:0000:8a2e:0370:7334'), true);
//     });
//
//     test(
//         'isIPv6Full allows prefix zeros - valid full address with lowercase letters',
//             () {
//           expect(
//               IpUtils.isIpv6Full('2001:0db8:85a3:0000:0000:8a2e:0370:7334'),
//               true);
//         });
//
//     test(
//         'isIPv6Full allows prefix zeros - invalid address due to extra segment',
//             () {
//           expect(
//               IpUtils.isIpv6Full('2001:0db8:85a3:0000:0000:8a2e:0370:7334:0000'),
//               false);
//         });
//
//     test(
//         'isIPv6Full allows prefix zeros - invalid address with non-hex characters',
//             () {
//           expect(
//               IpUtils.isIpv6Full('2001:0db8:85a3:0000:0000:8a2e:0370:7334:000g'),
//               false);
//         });
//
//     test(
//         'isIPv6Full disallows prefix zeros - valid full address without prefix zeros',
//             () {
//           expect(IpUtils.isIpv6Full('2001:db8:85a3:0:0:8a2e:370:7334'), true);
//         });
//
//     test(
//         'isIPv6Full disallows prefix zeros - invalid address with prefix zeros',
//             () {
//           expect(
//               IpUtils.isIpv6Full('2001:0db8:85a3:0000:0000:8a2e:0370:7334'),
//               true);
//         });
//   });
//
//   group('IPv6 Compressed Address Validation', () {
//     test('Valid compressed IPv6 addresses', () {
//       expect(IpUtils.isIpv6Compressed('2001:db8::1'), isTrue);
//       expect(IpUtils.isIpv6Compressed('::'), isTrue);
//       expect(IpUtils.isIpv6Compressed('::1'), isTrue);
//       expect(IpUtils.isIpv6Compressed('2001:db8::'), isTrue);
//       expect(IpUtils.isIpv6Compressed('2001:db8::00:1:2001:db8'), isTrue);
//
//       expect(IpUtils.isIpv6Compressed('2001:db8::1'), true);
//       expect(IpUtils.isIpv6Compressed('::'), true);
//       expect(IpUtils.isIpv6Compressed('::1'), true);
//       expect(IpUtils.isIpv6Compressed('2001:db8::'), true);
//       expect(IpUtils.isIpv6Compressed('2001:db8::0:1:2001:db8'), true);
//     });
//
//     test('Invalid IPv6 addresses', () {
//       expect(IpUtils.isIpv6Compressed('2001:db8::g1'), isFalse);
//       expect(IpUtils.isIpv6Compressed('2001:db8:0:0:0:0:0:0:1'), isFalse);
//       expect(IpUtils.isIpv6Compressed('2001::db8::1'), isFalse);
//       expect(IpUtils.isIpv6Compressed('2001:db8::1::'), isFalse);
//       expect(IpUtils.isIpv6Compressed('2001::25de::cade'), isFalse);
//       expect(
//           IpUtils.isIpv6Compressed('2001:db8::1:2001:db8:2001:db8:1'), isFalse);
//       expect(IpUtils.isIpv6Compressed(':'), isFalse);
//       expect(IpUtils.isIpv6Compressed(''), isFalse);
//
//       expect(IpUtils.isIpv6Compressed('2001:db8::00:1:2001:db8'), true);
//       expect(IpUtils.isIpv6Compressed('2001:db8::01'), true);
//       expect(IpUtils.isIpv6Compressed('2001:db8::0:1:2001:0db8'), true);
//     });
//
//     test('Edge cases and special inputs', () {
//       expect(IpUtils.isIpv6Compressed('2001:0db8:0:0:0:0:2:1'), isFalse);
//       expect(IpUtils.isIpv6Compressed('::'), isTrue);
//     });
//   });
//   group('isIPv6WithMask tests', () {
//     // 正确的IPv6地址及其遮罩测试
//     test('Valid IPv6 addresses with mask', () {
//       expect(
//           IpUtils.isIpv6WithCidr('2001:0db8:85a3:0000:0000:8a2e:0370:7334/64'),
//           isTrue);
//       expect(IpUtils.isIpv6WithCidr('::1/128'), isTrue);
//       expect(IpUtils.isIpv6WithCidr('fe80::/10'), isTrue);
//     });
//
//     // 错误的IPv6地址或掩码测试
//     test('Invalid IPv6 addresses or masks', () {
//       expect(IpUtils.isIpv6WithCidr('2001:db8::g1/64'), isFalse); // 包含无效字符
//       expect(IpUtils.isIpv6WithCidr('::1'), isFalse); // 缺少掩码
//       expect(IpUtils.isIpv6WithCidr('2001:db8::/129'), isFalse); // 掩码超出范围
//       expect(IpUtils.isIpv6WithCidr('2001:db8::/-1'), isFalse); // 负数掩码
//     });
//
//     // 特殊边缘测试
//     test('Boundary and special case tests', () {
//       expect(IpUtils.isIpv6WithCidr('::/0'), isTrue); // 全部IPv6地址范围
//       expect(IpUtils.isIpv6WithCidr('::/128'), isTrue); // 单个IPv6地址
//       expect(IpUtils.isIpv6WithCidr('2001:db8::/0'), isTrue);
//       // 错误格式测试
//       expect(IpUtils.isIpv6WithCidr('/2001:db8::/64'), isFalse); // 开头有斜杠
//       expect(IpUtils.isIpv6WithCidr('2001:db8::/64/'), isFalse); // 结尾有斜杠
//     });
//   });
//
//   group('IP Address with CIDR Mask Validation Tests', () {
//     test('Valid IPv4 address without leading zeros', () {
//       expect(IpUtils.isIpWithCidr('192.168.1.1/24'), isTrue);
//     });
//
//     test('Valid IPv4 address with leading zeros and option enabled', () {
//       expect(IpUtils.isIpWithCidr('192.168.001.010/24'), isTrue);
//     });
//
//     test('Valid IPv6 address', () {
//       expect(IpUtils.isIpWithCidr('2001:0db8:85a3:0000:0000:8a2e:0370:7334/64'),
//           isTrue);
//     });
//
//     test('IPv4 address with leading zeros and option disabled', () {
//       expect(IpUtils.isIpWithCidr('192.168.001.010/24'), true);
//     });
//
//     test('IPv4 address without CIDR mask', () {
//       expect(IpUtils.isIpWithCidr('192.168.1.1'), isFalse);
//     });
//
//     test('IPv4 address with invalid CIDR mask (>32)', () {
//       expect(IpUtils.isIpWithCidr('192.168.1.1/35'), isFalse);
//     });
//
//     test('IPv6 address without CIDR mask', () {
//       expect(IpUtils.isIpWithCidr('2001:0db8:85a3::7334'), isFalse);
//     });
//
//     test('IPv6 address with invalid CIDR mask (>128)', () {
//       expect(IpUtils.isIpWithCidr('2001:0db8:85a3::7334/129'), isFalse);
//     });
//   });
//   group('IPv4Mask Validation', () {
//     // 合法的IPv4掩码
//     test('Valid IPv4 masks', () {
//       var validMasks = [
//         '255.255.255.0',
//         '255.255.0.0',
//         '255.0.0.0',
//         '255.255.255.248',
//         '255.255.255.255'
//       ];
//       for (var mask in validMasks) {
//         expect(IpUtils.isIpv4Mask(mask), isTrue,
//             reason: '$mask should be valid');
//       }
//     });
//
//     // 不合法的IPv4掩码
//     test('Invalid IPv4 masks', () {
//       var invalidMasks = [
//         '255.255.255.1',
//         '256.0.0.0',
//         '255.255',
//         '255.255.255.-1',
//         'Test',
//         '255.0.255.0',
//         '',
//         '255'
//       ];
//       for (var mask in invalidMasks) {
//         expect(IpUtils.isIpv4Mask(mask), isFalse,
//             reason: '$mask should be invalid');
//       }
//     });
//   });
//   group('Removing leading zeros from IPv4 addresses', () {
//     test('IPv4 addresses with leading zeros', () {
//       expect(IpUtils.removeIpv4LeadingZeros('192.168.010.001'), '192.168.10.1');
//       expect(IpUtils.removeIpv4LeadingZeros('01.02.03.04'), '1.2.3.4');
//     });
//
//     test('IPv4 addresses without leading zeros', () {
//       expect(IpUtils.removeIpv4LeadingZeros('192.168.10.1'), '192.168.10.1');
//       expect(IpUtils.removeIpv4LeadingZeros('10.20.30.40'), '10.20.30.40');
//     });
//
//     test('IPv4 addresses with zero segments', () {
//       expect(IpUtils.removeIpv4LeadingZeros('192.000.000.001'), '192.0.0.1');
//       expect(IpUtils.removeIpv4LeadingZeros('000.000.000.000'), '0.0.0.0');
//     });
//
//     test('Edge cases and invalid inputs', () {
//       expect(IpUtils.removeIpv4LeadingZeros('192.168.0.0100'), '192.168.0.100');
//       // expect(IPUtil.removeIPv4LeadingZeros(''), '');
//       // expect(IPUtil.removeIPv4LeadingZeros('not.an.ip'), 'not.an.ip');
//     });
//   });
//
//   group('IPUtil.removeIPv6LeadingZeros', () {
//     test('Removes leading zeros in IPv6 address segments', () {
//       var result = IpUtils.removeIpv6LeadingZeros('2001:0db8::0:1:0201:0db8');
//       expect(result, equals('2001:db8::0:1:201:db8'));
//     });
//
//     test('Keeps IPv6 address without leading zeros unchanged', () {
//       var result = IpUtils.removeIpv6LeadingZeros('2001:db8::1:201:db8');
//       expect(result, equals('2001:db8::1:201:db8'));
//     });
//
//     test('Correctly handles IPv6 address with :: compression', () {
//       var result = IpUtils.removeIpv6LeadingZeros('2001:0db8::0001:0000');
//       expect(result, equals('2001:db8::1:0'));
//     });
//
//     test('Correctly handles IPv6 address with :: compression', () {
//       var result = IpUtils.removeIpv6LeadingZeros('::');
//       expect(result, equals('::'));
//     });
//   });
//
//   group('Domain Name Validation', () {
//     test('Valid domain names', () {
//       // 基础域名和复杂子域名
//       expect(IpUtils.isDomainName('example.com'), isTrue);
//       expect(IpUtils.isDomainName('sub.example.com'), isTrue);
//       expect(IpUtils.isDomainName('sub.sub.example.info'), isTrue);
//       // 含有连字符和数字的域名
//       expect(IpUtils.isDomainName('example-name9.com'), isTrue);
//     });
//
//     test('Invalid domain names', () {
//       // 顶级域名错误
//       expect(IpUtils.isDomainName('com'), isFalse);
//       // 开头或结尾存在非法字符
//       expect(IpUtils.isDomainName('-example.com'), isFalse);
//       expect(IpUtils.isDomainName('example-.com'), isFalse);
//       // 含有非法字符
//       expect(IpUtils.isDomainName('example!com'), isFalse);
//       // 缺少顶级域名
//       expect(IpUtils.isDomainName('localhost'), isFalse);
//     });
//
//     test('Edge cases', () {
//       // 空字符串应该返回false
//       expect(IpUtils.isDomainName(''), isFalse);
//       // 只有顶级域名应该返回false
//       expect(IpUtils.isDomainName('.com'), isFalse);
//       // 过长的域名
//       expect(IpUtils.isDomainName('${'a'.padRight(64, 'a')}.com'), isFalse);
//     });
//   });
// }
